// 用户相关类型
export interface User {
  id: string;
  nickname: string;
  avatar?: string;
  age: number;
  gender: 'male' | 'female';
  education: string;
  occupation: string;
  city: string;
  height?: number;
  income?: number;
  profileStatus: 'pending' | 'approved' | 'rejected' | 'incomplete';
  registerTime: string;
  lastLoginTime: string;
  isVip: boolean;
  phone?: string;
  idCard?: string;
  tags: string[];
  introduction?: string;
  requirements?: string;
  photos: string[];
}

// 年龄范围类型
export interface AgeRange {
  minAge?: number;
  maxAge?: number;
}

// 择偶年龄范围类型
export interface MateAgeRange {
  minAge?: number;      // 最小年纪，18岁
  maxAge?: number;      // 最大年纪，60岁
}

// 身高范围类型
export interface HeightRange {
  minHeight?: number; // 最低身高，单位是cm
  maxHeight?: number; // 最高身高，单位是cm
}

// 体重范围类型
export interface WeightRange {
  minWeight?: number; // 最低体重，单位是斤
  maxWeight?: number; // 最高体重，单位是斤
}

// 收入范围类型
export interface IncomeRange {
  minIncome?: number; // 最低年收入，单位是万元
  maxIncome?: number; // 最高年收入，单位是万元
}

// 学历范围类型
export interface EducationRange {
  minEducation?: string; // 最低学历要求: 小学,初中,高中,中专,职高,技校,大专,本科,硕士,博士,博士后
  maxEducation?: string; // 最高学历要求: 小学,初中,高中,中专,职高,技校,大专,本科,硕士,博士,博士后
}

// 用户档案查询请求类型
export interface QueryUserprofileRequest {
  userNumList?: number[];
  gender?: string;
  ageRange?: AgeRange;
  heightRange?: HeightRange;
  weightRange?: WeightRange;
  educationRange?: EducationRange;
  incomeRange?: IncomeRange;
  occupation?: string;
  hometownPreference?: string[];
  currentResidencePreference?: string[];
  maritalStatus?: string; // "未婚"、"离异"、"丧偶"
  parentsHasPension?: boolean;
  pageNum?: number;
  pageSize?: number;
}

// 用户档案类型
export interface UserProfile {
  userNum: number;
  name: string;
  gender: string;
  height: number;
  weight: number;
  bmiDesc?: string;
  birthDate: string;
  age?: number;
  chineseZodiac?: string;
  maritalStatus: string;
  occupation: string;
  hometown: string;
  currentResidence: string;
  education?: string; // 学历
  assets?: {
    annualIncome: number;
    car: string;
    house: string;
  };
  isPartyMember?: boolean;
  familyMembers?: {
    familyType: string;
    fatherDetail: {
      age: number;
      desc: string;
    };
    motherDetail: {
      age: number;
      desc: string;
    };
    otherDetail: Array<{
      age: number;
      desc: string;
    }>;
  };
  createUser?: string;
  modifyUser?: string;
}

// 用户档案查询响应数据类型
export interface QueryUserprofileData {
  userprofileList: UserProfile[];
  totalNum: number;
}

// 用户档案查询响应类型
export interface QueryUserprofileResponse {
  code: number;
  msg: string;
  data: QueryUserprofileData;
}

// 认证状态
export interface CertificationStatus {
  identity: boolean; // 身份认证
  education: boolean; // 学历认证
  occupation: boolean; // 职业认证
  asset: boolean; // 资产认证
}

// 匹配记录
export interface MatchRecord {
  id: string;
  userA: Pick<User, 'id' | 'nickname' | 'avatar' | 'age'>;
  userB: Pick<User, 'id' | 'nickname' | 'avatar' | 'age'>;
  matchScore: number; // 0-100
  matchReason: string;
  status: 'pending' | 'accepted' | 'rejected' | 'expired';
  createTime: string;
  counselor?: string; // 匹配顾问
  notes?: string;
}

// 互动记录
export interface InteractionRecord {
  id: string;
  userA: string;
  userB: string;
  type: 'chat' | 'gift' | 'meet';
  content: string;
  timestamp: string;
  status: 'active' | 'ended';
}

// 权限角色
export type UserRole = 'admin' | 'operator' | 'reviewer' | 'counselor';

// 登录用户信息
export interface AuthUser {
  id: string;
  username: string;
  role: UserRole;
  permissions: string[];
  avatar?: string;
  department?: string;
}

// API响应格式
export interface ApiResponse<T = any> {
  code: number;
  message: string;
  data: T;
  success: boolean;
}

// 分页参数
export interface PageParams {
  page: number;
  pageSize: number;
}

// 分页响应
export interface PageResult<T> {
  list: T[];
  total: number;
  page: number;
  pageSize: number;
}

// 统计数据
export interface DashboardStats {
  todayNewUsers: number;
  activeUsers: number;
  pendingReviews: number;
  todayMatches: number;
  profileApprovalRate: number;
  matchResponseRate: number;
  paidConversionRate: number;
}

// 用户筛选参数
export interface UserFilters {
  keyword?: string;
  gender?: 'male' | 'female';
  ageRange?: [number, number];
  city?: string;
  education?: string;
  profileStatus?: string;
  registerTimeRange?: [string, string];
  isVip?: boolean;
}

// 搜索参数
export interface SearchFilters extends UserFilters {
  heightRange?: [number, number];
  incomeRange?: [number, number];
  occupation?: string;
  tags?: string[];
  location?: {
    city: string;
    district?: string;
    radius?: number; // 公里
  };
}

// 年龄要求，年龄范围
export interface MateAgeRange {
  minAge?: number;      // 最小年纪，18岁
  maxAge?: number;      // 最大年纪，60岁
  minBrithday?: string; // 最小年纪，18岁
  maxBrithday?: string; // 最大年纪，60岁
}

// mate preference
export interface MatePreference {
  userNum: number;                           // 用户编号
  ageRange?: MateAgeRange;                   // 年龄要求，年龄范围
  minHeight?: number;                        // 身高要求，最低身高
  maxWeight?: number;                        // 体重要求，最高体重，单位
  minIncome?: number;                        // 收入要求，最低收入，单位万元
  minEducation?: string;                     // 学历要求，最低学历
  occupationRequire?: string[];              // 职业要求
  currentResidenceRequired?: string[];       // 工作地要求
  hometownRequired?: string[];               // 籍贯要求
  personalityTraits?: string[];              // 个性特征
  otherRequired?: string[];                  // other
  createUser?: string;
  modifyUser?: string;
}

// 同步择偶偏好请求类型
export interface SyncMatePreferenceRequest {
  matePreference: MatePreference;
}

// 同步择偶偏好响应数据类型
export interface SyncMatePreferenceData {
  userNum: number;
}

// 同步择偶偏好响应类型
export interface SyncMatePreferenceResponse {
  code: number;
  msg: string;
  data: SyncMatePreferenceData;
}

// 查询择偶偏好请求类型
export interface QueryMatePreferenceRequest {
  userNumList: number[]; // 用户编号
}

// 择偶偏好详细信息
export interface MatePreferenceDetail {
  userNum: number;   // 用户编号
  standards: string; // 择偶标准
  ageRange?: AgeRange;    // 年龄要求，年龄范围
  heightRange?: HeightRange; // 身高要求，最低身高～最高身高
  weightRange?: WeightRange; // 体重要求，最高体重，单位斤
  incomeRange?: IncomeRange;              // 收入要求，最低收入，单位万元
  educationRange?: EducationRange;           // 学历要求，最低学历
  occupationRequire?: string[];        // 职业要求
  currentResidenceRequired?: string[]; // 工作地要求，枚举值：上海、杭州、合肥、北京、南京、芜湖
  hometownRequired?: string[];         // 籍贯要求
  personalityTraits?: string[]; // 个性特征
  otherRequired?: string[];     // other
  createUser?: string;
  modifyUser?: string;
}

// 查询择偶偏好响应数据类型
export interface QueryMatePreferenceData {
  matePreferenceList: MatePreferenceDetail[];
}

// 查询择偶偏好响应类型
export interface QueryMatePreferenceResponse {
  code: number;
  msg: string;
  data: QueryMatePreferenceData;
}

// 个人资产状态
export interface Assets {
  annualIncome: number; // 年收入，单元: 万元
  car: string;          // 车子状态，枚举值，全款/按揭/无/随时买
  house: string;        // 房子状态，枚举值，城区全款房/城区按揭房/乡镇房/随时买
}

// 关系详情
export interface RelationDetail {
  age?: number;  // 年纪，50
  desc?: string; // 情况介绍，比如：职业、收入、老师/在职/退休/经商
}

// 家庭成员
export interface FamilyMembers {
  familyType?: string;           // 家庭成员的备注，单亲家庭
  fatherDetail?: RelationDetail; // 父亲情况
  motherDetail?: RelationDetail; // 母亲情况
  otherDetail?: RelationDetail[]; // 其他成员情况
}

// 同步用户档案请求类型
export interface SyncUserprofileRequest {
  userNum: number;          // 用户编号
  name: string;             // 姓名，某某
  gender: string;           // 性别，男 / 女
  height: number;           // 身高，单位：厘米
  weight: number;           // 体重，单位：斤
  birthDate: string;        // 生日，1992-08-15
  maritalStatus: string;    // 婚姻状态，枚举值，未婚/离异/丧偶
  assets: Assets;           // 个人资产状态
  education: string;        // 教育经历：小学/初中/中专/高中/大专/本科/硕士/博士/博士后
  occupation: string;       // 职业：公务员/教师/医生/护士/律师/法官/警察/自由职业者/经商
  isPartyMember: boolean;   // 是否党员
  hometown: string;         // 籍贯，枚举值：广德、郎溪、宁国、宣城
  currentResidence: string; // 现居住地/工作地， 枚举值：上海、杭州、合肥、北京、南京、芜湖
  familyMembers: FamilyMembers; // 家庭成员
  createUser: string;
  modifyUser: string;
}

// 同步用户档案响应数据类型
export interface SyncUserprofileData {
  userNum: number; // 用户编号
}

// 同步用户档案响应类型
export interface SyncUserprofileResponse {
  code: number;
  msg: string;
  data: SyncUserprofileData;
}

// 用户全部信息请求类型
export interface UserAllInfoRequest {
  userNumList: number[]; // 用户编号
}

// 用户全部信息数据类型
export interface UserAllData {
  // 个人资料
  userNum: number;       // 用户编号
  name: string;          // 姓名，某某
  gender: string;        // 性别，男 / 女
  height: number;        // 身高，单位：厘米
  weight: number;        // 体重，单位：斤
  birthDate: string;     // 生日，1992-08-15
  age: number;           // 年龄
  chineseZodiac: string; // 属相
  maritalStatus: string; // 婚姻状态，未婚/离异/丧偶
  
  // 高级资料
  assets: Assets;           // 个人资产状态
  education: string;        // 教育经历，枚举值：小学,初中,高中,中专,职高,技校,大专,本科,硕士,博士,博士后
  occupation: string;       // 职业，枚举值：公务员/教师/医生/护士/律师/法官/警察/自由职业者/经商
  isPartyMember: boolean;   // 是否党员
  hometown: string;         // 籍贯，枚举值：广德、郎溪、宁国、宣城
  currentResidence: string; // 现居住地/工作地，枚举值：上海、杭州、合肥、北京、南京、芜湖
  familyMembers: FamilyMembers; // 家庭成员
  
  // 择偶标准
  ageRange: MateAgeRange;    // 年龄要求，年龄范围
  minHeight: number;     // 身高要求，最低身高
  maxWeight: number;     // 体重要求，最高体重，单位
  minIncome: number;     // 收入要求，最低收入，单位万元
  minEducation: string;  // 学历要求，最低学历
  
  // 高级择偶标准
  occupationRequire: string[];        // 职业要求
  currentResidenceRequired: string[]; // 工作地要求，枚举值：上海、杭州、合肥、北京、南京、芜湖
  hometownRequired: string[];         // 籍贯要求，枚举值：广德、郎溪、宁国、宣城
  personalityTraits: string[];        // 个性特征
  otherRequired?: string[];           // other
  createUser: string;
  modifyUser: string;
}

// 用户全部信息响应数据类型
export interface UserAllInfoData {
  userInfoList: UserAllData[];
}

// 用户全部信息响应类型
export interface UserAllinfoResponse {
  code: number;
  msg: string;
  data: UserAllInfoData;
}

// 菜单项
export interface MenuItem {
  key: string;
  label: string;
  icon?: React.ReactNode;
  path?: string;
  children?: MenuItem[];
  permission?: string;
}